package br.com.toscano.contpedido.view;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.inject.Inject;
import javax.servlet.http.HttpServletRequest;

import br.com.toscano.contpedido.business.PedidoBC;
import br.com.toscano.contpedido.business.StatusPedidoBC;
import br.com.toscano.contpedido.business.UsuarioBC;
import br.com.toscano.contpedido.constant.ConstantesMensagem;
import br.com.toscano.contpedido.domain.ContextoUsuario;
import br.com.toscano.contpedido.domain.Pedido;
import br.com.toscano.contpedido.domain.Perfil;
import br.com.toscano.contpedido.domain.StatusPedido;
import br.com.toscano.contpedido.domain.Usuario;
import br.com.toscano.contpedido.view.converter.DateConverter;
import br.gov.frameworkdemoiselle.annotation.NextView;
import br.gov.frameworkdemoiselle.annotation.PreviousView;
import br.gov.frameworkdemoiselle.stereotype.ViewController;
import br.gov.frameworkdemoiselle.transaction.Transactional;

@ViewController
@NextView("./pedido_cancelamento.jsf")
@PreviousView("./pedido_cancelamento.jsf")
public class PedidoCancelamentoMB extends PedidoListMB {

	@Inject
	private PedidoBC pedidoBC;

	@Inject
	private UsuarioBC usuarioBC;
	private List<SelectItem> usuarios;
	private Long usuario;
	private boolean filtrar = false;
	public void filtrar() {
		super.clear();
		this.getIdPedido();
		super.getDataModel();
		filtrar = true;
	}
	
	public List<SelectItem> getUsuarios() {
		usuarios = new ArrayList<SelectItem>();
		boolean admin = false;
		ContextoUsuario usuario = (ContextoUsuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(ConstantesMensagem.CONTEXTO_USUARIO_SESSAO);
		if (usuario != null) {
			for (Perfil perfil :usuario.getUsuario().getListaPerfil()) {
				if (perfil.getId().equals(Perfil.PERFIL_ADM)){
					admin = true;
				}
			}
			
		}
		if (admin) {
			List<Usuario> lista = usuarioBC.findAll();
			for (Usuario obj: lista) {
				usuarios.add(new SelectItem(obj.getId() , obj.getNome()));
			}
		} else {
			usuarios.add(new SelectItem(usuario.getUsuario().getId() , usuario.getUsuario().getNome()));
		}
		return usuarios;
	}

	public void setUsuarios(List<SelectItem> usuarios) {
		this.usuarios = usuarios;
	}

	public Long getUsuario() {
		return usuario;
	}

	public void setUsuario(Long usuario) {
		this.usuario = usuario;
	}

	@Inject
	private StatusPedidoBC statusPedidoBC;

	public List<SelectItem> getStatusPedidos() {
		super.setStatusPedidos(new ArrayList<SelectItem>());
		StatusPedido obj = statusPedidoBC.load(StatusPedido.ABERTO);
		super.getStatusPedidos().add(new SelectItem(obj.getId() , obj.getDescricao()));
		return super.getStatusPedidos();
	}

	@Override
	protected List<Pedido> handleResultList() {
		if (filtrar) {
			
//		
//		Long idUsuario = null;
//		
//		boolean admin = false;
//		ContextoUsuario usuario = (ContextoUsuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(ConstantesMensagem.CONTEXTO_USUARIO_SESSAO);
//		if (usuario != null) {
//			for (Perfil perfil :usuario.getUsuario().getListaPerfil()) {
//				if (perfil.getId().equals(Perfil.PERFIL_ADM)){
//					admin = true;
//				}
//			}
//			
//		}
//		if (!admin) {
//			idUsuario = usuario.getUsuario().getId();
//		}
//
//		
//		return this.pedidoBC.consultarPedidos(null, null, getCliente(), idUsuario, StatusPedido.ENTREGUE,  null, getDataCadastroInicial(), getDataCadastroFinal(), getDataEntregaInicial(), getDataEntregaFinal(), null);


		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("pedidos", null);
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("pedido", null);

		this.setStatusPedido(null);
		this.setCliente(null);
		setDataCadastroInicial(null);
		setDataCadastroFinal(null);
		setDataEntregaInicial(null);
		setDataEntregaFinal(null);
		setDataEntregaInicial(null);
		setDataEntregaFinal(null);
		setIdPedido(null);getIdPedido();
		boolean admin = false;
		ContextoUsuario usuario = (ContextoUsuario)FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get(ConstantesMensagem.CONTEXTO_USUARIO_SESSAO);
		if (usuario != null) {
			for (Perfil perfil :usuario.getUsuario().getListaPerfil()) {
				if (perfil.getId().equals(Perfil.PERFIL_ADM)){
					admin = true;
				}
			}
			
		}
		
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();    
		if (request.getParameter("statusPedido") != null && !"".equals(request.getParameter("statusPedido")))
			this.setStatusPedido(new Long(request.getParameter("statusPedido")));

		if (!admin) {
			this.setUsuario(usuario.getUsuario().getId());
		} else {
			if (request.getParameter("usuario") != null && !"".equals(request.getParameter("usuario")))
				this.setUsuario(new Long(request.getParameter("usuario")));
		}
		
		if (request.getParameter("idPedido") != null && !"".equals(request.getParameter("idPedido")))	{
			try {
				this.setIdPedido(new Long(request.getParameter("idPedido")));
			} catch (Exception e) {
				this.setIdPedido(new Long(0));
			}
		}

		if (request.getParameter("cliente") != null && !"".equals(request.getParameter("cliente")))	
			this.setCliente(new Long(request.getParameter("cliente")));
		
		if (request.getParameter("dataCadastroInicial_input") != null && !"".equals(request.getParameter("dataCadastroInicial_input")))	{
			setDataCadastroInicial(DateConverter.getDate(request.getParameter("dataCadastroInicial_input")));
		}

		if (request.getParameter("dataCadastroFinal_input") != null && !"".equals(request.getParameter("dataCadastroFinal_input")))	{
			setDataCadastroFinal(DateConverter.getDate(request.getParameter("dataCadastroFinal_input")));
		}

		if (request.getParameter("dataEntregaInicial_input") != null && !"".equals(request.getParameter("dataEntregaInicial_input")))	{
			setDataEntregaInicial(DateConverter.getDate(request.getParameter("dataEntregaInicial_input")));
		}

		if (request.getParameter("dataEntregaFinal_input") != null && !"".equals(request.getParameter("dataEntregaFinal_input")))	{
			setDataEntregaFinal(DateConverter.getDate(request.getParameter("dataEntregaFinal_input")));
		}

		List<Pedido> pedidos = this.pedidoBC.consultarPedidos(null, getIdPedido(), getCliente(), this.usuario, StatusPedido.ENTREGUE, null, getDataCadastroInicial(), getDataCadastroFinal(), getDataEntregaInicial(), getDataEntregaFinal(), null, null);
		
		FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("pedidos", pedidos);

		return pedidos;
		
		}

		return new ArrayList<Pedido>();
		
	}
	
	@Transactional
	public String deleteSelection() {
		boolean delete;
		for (Iterator<Long> iter = getSelection().keySet().iterator(); iter.hasNext();) {
			Long id = iter.next();
			delete = getSelection().get(id);
			if (delete) {
				pedidoBC.registrarCancelamento(id);
				iter.remove();
			}
		}
		return getPreviousView();
	}
}